home *** CD-ROM | disk | FTP | other *** search
/ PC go! 2018 January / PCgo 01-2018 CD-ROM Germany.iso / nw.pak / Unnamed File 004900.txt < prev    next >
Encoding:
Text File  |  2015-07-29  |  2.0 KB  |  54 lines

  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4.  
  5. // Routines used to normalize arguments to messaging functions.
  6.  
  7. function alignSendMessageArguments(args, hasOptionsArgument) {
  8.   // Align missing (optional) function arguments with the arguments that
  9.   // schema validation is expecting, e.g.
  10.   //   extension.sendRequest(req)     -> extension.sendRequest(null, req)
  11.   //   extension.sendRequest(req, cb) -> extension.sendRequest(null, req, cb)
  12.   if (!args || !args.length)
  13.     return null;
  14.   var lastArg = args.length - 1;
  15.  
  16.   // responseCallback (last argument) is optional.
  17.   var responseCallback = null;
  18.   if (typeof args[lastArg] == 'function')
  19.     responseCallback = args[lastArg--];
  20.  
  21.   var options = null;
  22.   if (hasOptionsArgument && lastArg >= 1) {
  23.     // options (third argument) is optional. It can also be ambiguous which
  24.     // argument it should match. If there are more than two arguments remaining,
  25.     // options is definitely present:
  26.     if (lastArg > 1) {
  27.       options = args[lastArg--];
  28.     } else {
  29.       // Exactly two arguments remaining. If the first argument is a string,
  30.       // it should bind to targetId, and the second argument should bind to
  31.       // request, which is required. In other words, when two arguments remain,
  32.       // only bind options when the first argument cannot bind to targetId.
  33.       if (!(args[0] === null || typeof args[0] == 'string'))
  34.         options = args[lastArg--];
  35.     }
  36.   }
  37.  
  38.   // request (second argument) is required.
  39.   var request = args[lastArg--];
  40.  
  41.   // targetId (first argument, extensionId in the manifest) is optional.
  42.   var targetId = null;
  43.   if (lastArg >= 0)
  44.     targetId = args[lastArg--];
  45.  
  46.   if (lastArg != -1)
  47.     return null;
  48.   if (hasOptionsArgument)
  49.     return [targetId, request, options, responseCallback];
  50.   return [targetId, request, responseCallback];
  51. }
  52.  
  53. exports.alignSendMessageArguments = alignSendMessageArguments;
  54.